﻿using PersistenceLayer.DAL;
using PersistenceLayer.Model;
using SupportLayer.Constantes.OUTROS;
using SupportLayer.Constantes.PRODUTO;
using SupportLayer.Enums;
using SupportLayer.Objetos.Produto;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ByBikeShop.Administracao.Pages
{
	public partial class Marcas : BaseAdmin
	{
		public int GetMarcaID
		{
			get
			{
				if ((Request.QueryString[OUTROS.MARCA_ID] == null) || (Request.QueryString[OUTROS.MARCA_ID].ToString() == string.Empty))
					return 0;

				return Convert.ToInt32(Request.QueryString[OUTROS.MARCA_ID].ToString());
			}
		}
		public Acao GetAcao
		{
			get
			{
				if ((Request.QueryString[OUTROS.ACAO] == null) || (Request.QueryString[OUTROS.ACAO].ToString() == string.Empty))
					return 0;

				return (Acao)Convert.ToInt32(Request.QueryString[OUTROS.ACAO].ToString());
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			base.PageLoad(true);
		}

		public override void CarregaDados()
		{
			if (IsPostBack)
				return;

			if ((GetAcao == Acao.ADICIONAR) || (GetAcao == Acao.VER))
				return;

			if (GetMarcaID == 0)
				return;

			Produto_Marca pm = new Produto_MarcaDAL().Obter(GetMarcaID);
			txtDescricao.Text = pm.Descricao;
		}

		public override void CarregaGrid()
		{
			grdMarca.AutoGenerateColumns = false;
			grdMarca.Columns.Clear();

			grdMarca.Columns.Add(Util.Gridview.GeraBoundField(MARCA.ID, "ID"));
			grdMarca.Columns.Add(Util.Gridview.GeraBoundField(MARCA.DESCRICAO, "Descrição", 400));
			grdMarca.Columns.Add(Util.Gridview.GeraButtonField(ButtonType.Image, "", "editar", "/Imagens/Icones/edit.svg"));
			grdMarca.Columns.Add(Util.Gridview.GeraButtonField(ButtonType.Image, "", "deletar", "/Imagens/Icones/delete.svg"));
		}

		public override void PopulaGrid()
		{
			DataTable dt = new DataTable();
			dt.Columns.Add(MARCA.ID);
			dt.Columns.Add(MARCA.DESCRICAO);

			foreach (Produto_Marca pm in new Produto_MarcaDAL().Listar())
				dt.Rows.Add(pm.ID, pm.Descricao);

			grdMarca.DataSource = dt;
			grdMarca.DataBind();
		}

		protected void grdMarca_RowCommand(object sender, GridViewCommandEventArgs e)
		{
			int ID = Util.Gridview.GetID(sender, e);

			switch (e.CommandName)
			{
				case "editar":
					Response.Redirect(string.Format("Marcas.aspx?{0}={1}&{2}={3}", OUTROS.ACAO, (int)Acao.EDITAR, OUTROS.MARCA_ID, ID));
					break;
				case "deletar":
					var pmd = new Produto_MarcaDAL();
					pmd.Deletar(pmd.Obter(ID));
					break;
				default:
					break;
			}

			Response.Redirect(string.Format("Marcas.aspx?{0}={1}", OUTROS.ACAO, (int)Acao.ADICIONAR));
		}

		protected void grdMarca_RowDataBound(object sender, GridViewRowEventArgs e)
		{
			if (e.Row.RowType == DataControlRowType.DataRow)
			{
				Image imgEditar = (Image)e.Row.Cells[2].Controls[0];
				imgEditar.Height = 26;
				Image imgExcluir = (Image)e.Row.Cells[3].Controls[0];
				imgExcluir.Height = 30;
			}
		}

		protected void btnSalvar_Click(object sender, EventArgs e)
		{
			try
			{
				if (txtDescricao.Text.Equals(string.Empty))
					throw new ApplicationException("O campo MARCA deve ser preenchido!");

				Produto_Marca pm = new Produto_Marca();
				Produto_MarcaDAL pmd = new Produto_MarcaDAL();
				MarcaClass Marca = new MarcaClass();

				if (GetAcao == Acao.ADICIONAR)
				{
					pm.Descricao = txtDescricao.Text;
					pmd.Adicionar(pm);
				}
				else
				{
					pm = pmd.Obter(GetMarcaID);
					pm.Descricao = txtDescricao.Text;
					pmd.Atualizar(pm);
				}

				Response.Redirect(string.Format("Marcas.aspx?{0}={1}", OUTROS.ACAO, (int)Acao.ADICIONAR));
			}
			catch (Exception ex)
			{
				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
			}
		}

		protected void btnLimpar_Click(object sender, EventArgs e)
		{
			Response.Redirect(string.Format("Marcas.aspx?{0}={1}", OUTROS.ACAO, (int)Acao.ADICIONAR));
		}
	}
}